﻿using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.IO;
using System.Reflection;
using System.Xml;
using System.Xml.Serialization;

namespace Black.Minecraft.Editor.Models
{
    [Serializable()]
    [XmlRoot(ElementName = "Item")]
    public class Item
    {
        #region Propriétés

        /// <summary>
        /// Obtient ou définit si l'objet peut être enchanté
        /// </summary>
        [XmlElement(typeof(bool), ElementName = "CanEnchant")]
        public bool CanEnchant
        {
            get;
            set;
        }

        /// <summary>
        /// Obtient ou définit si l'objet peut être réparer
        /// </summary>
        [XmlElement(typeof(bool), ElementName = "CanRepair")]
        public bool CanRepair
        {
            get;
            set;
        }

        [XmlIgnore]
        public bool Custom
        {
            get;
            set;
        }

        /// <summary>
        /// Obtient ou définit l'indicateur de dommage
        /// </summary>
        [XmlElement(typeof(short), ElementName = "Damage")]
        public short Damage
        {
            get;
            set;
        }

        /// <summary>
        /// Obtient ou définit le type de l'équipement
        /// </summary>
        [XmlElement(typeof(byte), ElementName = "EquipmentType")]
        public byte EquipmentType
        {
            get;
            set;
        }

        /// <summary>
        /// Obtient ou définit l'identifiant
        /// </summary>
        [XmlElement(typeof(short), ElementName = "Id")]
        public short Id
        {
            get;
            set;
        }

        /// <summary>
        /// Obtient ou définit le nombre total par empilement
        /// </summary>
        [XmlElement(typeof(byte), ElementName = "MaxStack")]
        public byte MaxStack
        {
            get;
            set;
        }

        /// <summary>
        /// Obtient ou définit le nom
        /// </summary>
        [XmlElement(typeof(string), ElementName = "Name")]
        public string Name
        {
            get;
            set;
        }

        #endregion

        #region Constructeurs

        /// <summary>
        /// Constructeur de la classe
        /// </summary>
        public Item()
        {
            this.Custom = false;
        }

        #endregion

        #region Fonctions statiques

        /// <summary>
        /// Charge la liste des objets depuis la ressource 
        /// </summary>
        /// <returns>Liste des objets</returns>
        public static List<Item> LoadItems()
        {
            try
            {
                List<Item> list;
                Assembly assembly = Assembly.GetExecutingAssembly();

                using (Stream stream = assembly.GetManifestResourceStream("Black.Minecraft.Editor.Assets.ItemsList.xml"))
                {
                    XmlSerializer serializer = new XmlSerializer(typeof(List<Item>), new XmlRootAttribute("Root"));
                    list = (List<Item>)serializer.Deserialize(stream);
                }

                return (list);
            }
            catch (Exception e)
            {
                Debug.WriteLine("Error : " + e.Message);
                return (null);
            }
        }

        #endregion
    }
}
